package com.woniu.tms.attendance.service;

import com.woniu.tms.entity.*;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @Author: peng
 */
public interface AttendanceService {
    /**
     * 学生查询自己的考勤信息
     * @param example
     * @return
     */
    List<Checkinfo> listSelf(CheckinfoExample example);

    /**
     * 讲师查询自己的班级的学生的考勤情况
     * 班主任查询自己的班级学生的考勤情况
     * @param uid
     * @return
     */
    Map<String,Object> listSelfClassByTid(Integer uid, String examplesMap, Integer pageNum , Integer pageSize) throws IOException;

    /**
     * 班主任查询自己的班级学生的考勤情况
     * @param classmanager
     * @return
     */
    List<Checkinfo> listSelfClassByCmid(User classmanager,CheckinfoExample example);

    /**
     *
     * 教学主管查询所有学员的出勤信息，也可按照班级查询，也可查看班主任所带班级的出勤率（按天、周、月季度）
     * @param className
     * @param classmanagerid
     * @return
     */
    List<Checkinfo> listAll(String className,Integer classmanagerid,CheckinfoExample example);

    /**
     * 就业专员查询所有学院的出勤率，点击按钮显示详情
     * @return
     */
    List<Checkinfo> lisAll(CheckinfoExample example);

    /**
     * 根据讲师id，或班主任id查询其对应的所有的班级
     * @return
     */
    List<Classes> listClassesByTidOrCmid(Integer uid);

    /**
     * 根据讲师id或班主任id查询(即确认人的id)，需要其审批的、状态为待审核的请假信息
     * @param confirmid
     * @return
     */
    List<Sickform> listSickInfo(Integer confirmid);

    /**
     * 根据主键查询考勤信息
     * @param cfid
     * @return
     */
    Checkinfo selectByCfid(Integer cfid);

    /**
     * 班主任修改学生的考勤信息
     * @param checkinfo
     */
    void confirmUpdate(Checkinfo checkinfo);

    /**
     * 班主任查询其对应班级的全部学生
     * @param uid
     * @param examplesMap
     * @param pageNum
     * @param pageSize
     * @return
     */
    Map<String,Object> listStudent(Integer uid, String examplesMap, Integer pageNum , Integer pageSize) throws IOException;

    /**
     * 批量增加学员考勤信息
     * @param paramMap
     */
    void addSomeCheckinfo(Map<String , Object> paramMap);

    /**
     * 批量删除学员考勤信息
     * @param ids
     */
    void delSome(Integer ids[]);

    /**
     * 查询所有学员的考勤率，形成集合
     * @return
     */
    Map<String,Object> listAttendance(Integer pageNum , Integer pageSzie , String exampleMap) throws IOException;

    /**
     * 根据学生id及考勤状态，该学生不同考勤状态下的出勤率以及迟到率、请假率
     * @param studentid
     * @param cfstatus
     * @return
     */
    Double selectCount(Integer studentid , String cfstatus);

    /**
     * 教学主管根据班主任id查询其对应班级的考勤率，初次显示全部班级的考勤率
     * @param pageNum
     * @param pageSzie
     * @param examplesMap
     * @return
     *
     */
    Map<String,Object> listAttendanceByClassManagerid(Integer pageNum , Integer pageSzie , String examplesMap) throws IOException;

    /**
     * 查询所有的班主任
     * @return
     */
    List<User> getClassManager();

    /**
     * 根据id查询一个人
     * @param uid
     * @return
     */
    User selectOne(Integer uid);
}
